package ribbonconfig;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Author: Tvemic⁹
 * @DateTime: 2022/6/13 10:07
 * @Description: 负载均衡规则配置
 * AvailabilityFilteringRule ：过滤掉一直连接失败的被标记为circuit tripped（电路跳闸）的后端Service，并过滤掉那些高并发的后端Server或者使用一个AvailabilityPredicate来包含过滤Server的逻辑，其实就是检查status的记录的各个Server的运行状态
 * BestAvailableRule ： 选择一个最小的并发请求的Server，逐个考察Server，如果Server被tripped了，则跳过
 * RandomRule ： 随机选择一个Server
 * RetryRule ： 对选定的负责均衡策略机上充值机制，在一个配置时间段内当选择Server不成功，则一直尝试使用subRule的方式选择一个可用的Server
 * RoundRobinRule ： 轮询选择，轮询index，选择index对应位置Server
 * WeightedResponseTimeRule ：根据响应时间加权，响应时间越长，权重越小，被选中的可能性越低
 * ZoneAvoidanceRule ： | （默认是这个）负责判断Server所Zone的性能和Server的可用性选择Server，在没有Zone的环境下，类似于轮询（`RoundRobinRule`）
 */
@Configuration
public class RibbonRuleConfig {

    @Bean
    public IRule iRule(){

        //随机策略（随机选择一个Server）
        return new RandomRule();
    }

}
